import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */

    public int lowestCommonAncestor(TreeNode root, int o1, int o2) {

        if(root==null){
            //树为空，没有最近公共祖先
            return 0;
        }

        if(root.val==o1||root.val==o2){
            //其中一个为root，公共祖先为root
            return root.val;
        }
        int leftAncestor=lowestCommonAncestor(root.left,o1,o2);//左子树的最近公共祖先
        int rightAncestor=lowestCommonAncestor(root.right,o1,o2);//右子树的最近公共祖先

        if(leftAncestor!=0&&rightAncestor!=0){
            //左右子树都有公共祖先，root是共同公共祖先
            return root.val;

        }
        if(leftAncestor!=0&&rightAncestor==0){
            //左子树有公共祖先，返回公共祖先
            return leftAncestor;
        }
        if(rightAncestor!=0&&leftAncestor==0){
            //右子树有公共祖先，返回公共祖先
            return rightAncestor;
        }
        //都没有，返回0
        return 0;
    }
}